Noise-predictive maximum-likelihood detection